/*
Đối tượng hiển thị nội dung màn chơi.
	
*/
	var in_game;
(function (window){

	function inGame(gameWidth, gameHeight){
		// nội dung câu hỏi
		this.url = "http://data2.yome.vn";
		this.picture;						// hình ảnh câu hỏi
		this.topBar;						// banner trên cùn hiển thị số câu đã vượt qua, số ruby nhận được, nút trợ giúp
		this.keys = new Array(14);			// các phím bấm được hiển thị.
		this.answers = new Array();			// các ô trong câu trả lời, mỗi phần tử là 1 mảng, 0 - hình ảnh, 1 - text.
		this.answerText;					// câu trả lời dưới dạng text
		this.user_answers = new Array;		// câu trả lời của người chơi
		this.level;		
		this.ruby;
		this.counter = 0; 					// biến đếm số chữ đã được người chơi chọn.
		this.stackAnswers = new Array();	// lưu đối tượng khi người dùng click vào câu trả lời.
		this.helpButton;					// hình ảnh nút gợi ý
		this.timesOfHelp;				// số lần sử dụng gợi ý
		this.gameHeight = gameHeight;
		this.gameWidth = gameWidth; 
		this.pressButtonPost = false;

		this.attension;
		this.attensionChecker;
		this.attensionSubText;
		this.attensionText;
		this.attensionBox;

	}

	inGame.prototype = new createjs.Container();
	inGame.prototype.Container_initialize = inGame.prototype.initialize();
	
	// hàm khởi tạo
	inGame.prototype.initialize = function(){
		in_game = this;
		this.timesOfHelp = 0;
		// hình nền và banner trên đỉnh
		this.background = new createjs.Bitmap(contentmanager.bg_main);
		this.helpButton = new createjs.Bitmap(contentmanager.btn_help);
		this.level= new createjs.Text(qanda.getLevel(),"bold 30px Arial","#000");
		this.ruby = new createjs.Text(savescore.getRuby(), "bold 30px Arial","#000");
		this.bg_ruby = new createjs.Bitmap(contentmanager.bg_ruby);
		this.bg_ruby.x = 710; this.bg_ruby.regX = this.bg_ruby.image.width/2;
		this.bg_ruby.y = 35;  this.bg_ruby.regY	= this.bg_ruby.image.height/2;
		this.bg_ruby.scaleX = 0.9;
		this.bg_ruby.scaleY = 0.9;
		// hình ảnh của câu hỏi
		this.picture = qanda.getBitmap();
		this.picture .regX = this.picture.image.width/2;
		this.picture .regY = this.picture.image.height/2;
		this.picture .x = this.gameWidth/2; 
		this.picture .y = 240;


		// đáp án của câu hỏi
		this.answerText = new createjs.Text(qanda.getAnswer(),"30px Arial","#FFF");
		this.normalizeText();

		// chỉ dùng cho lv đầu tiiên
		qanda.loadNextImage();
		this.generateAnswer();
		this.generateKeyboard();
		this.addChild(this.background, this.answerText, this.level, this.ruby, this.picture, this.bg_ruby);
		
		for(i = 0; i < this.keys.length; i++){
			this.addChild(this.keys[i][0]);
			this.addChild(this.keys[i][1]);
		}

		for(i = 0; i < this.answers.length; i++){
			this.addChild(this.answers[i][0]);
			this.addChild(this.answers[i][1]);
		}

		
		//Them nut share
		this.btnShareFace = new createjs.Bitmap(contentmanager.btn_share_facebook);
		this.btnShareFace.x = 75; this.btnShareFace.regX = this.btnShareFace.image.width/2;
		this.btnShareFace.y = 220; this.btnShareFace.regY = this.btnShareFace.image.height/2;
		this.btnShareFace.addEventListener("mousedown", in_game.mouseDownButtonShare);
		this.btnShareFace.addEventListener("mouseover", in_game.mouseOverButtonShare);
		this.btnShareFace.addEventListener("mouseout", in_game.mouseOutButtonShare);

		// phần trọ giúp
		this.helpButton.x = 75;
		this.helpButton.y = 300;
		this.helpButton.regX = this.helpButton.image.width/2;
		this.helpButton.regY = this.helpButton.image.height/2;
		this.helpButton.addEventListener("mousedown", in_game.getHelp);
		this.helpButton.addEventListener("mouseover", function(e){e.target.scaleX = 1.1;e.target.scaleY = 1.1;});
		this.helpButton.addEventListener("mouseout", function(e){e.target.scaleX = 1;e.target.scaleY = 1;});

		this.attension = new createjs.Container();
		this.attensionText = new createjs.Text("","30px Arial","#FFF");
		this.attensionSubText = new createjs.Text("","12px Arial","#FFF");
		this.attensionBox = new createjs.Bitmap(contentmanager.bg_attension);
		this.attension.alpha = 0;
		this.attension.addChild(this.attensionBox, this.attensionText, this.attensionSubText);

		this.addChild(this.btnShareFace, this.helpButton);
		this.addChild(this.attension);


		//Khởi tạo hiệu ứng chụp ảnh - cho share Facebook
		this.effectTakePhoto = new createjs.Shape();
		this.effectTakePhoto.snapToPixel = true;
		this.effectTakePhoto.graphics.beginFill("#fff").drawRect(0, 0, 740, 536); 
		this.effectTakePhoto.alphe = 0.8;
		this.effectTakePhoto.x = 0;
		this.effectTakePhoto.y = 0;
		this.effectTakePhoto.visible = false;
		this.addChild(this.effectTakePhoto);

		this.createBlurBackground();



		//Cai dat form html
		this.ansOfUser; //Nhận các kết quả từ form
		var htmlElement = document.getElementById('input');
		var OKhtmlElement = document.getElementById('ok');
		$('#ans').show();
		var self = this;
		$("#ok").click(function() {
		   self.performPost($("#input").val());
		});

		var divElement = document.getElementById('ans');

		$('#ans').attr('display', 'true');

		var YesElement = document.getElementById('Yes');
		var NoElement = document.getElementById('No');
		this.YesElement =  new createjs.DOMElement(YesElement); this.YesElement.visible = false;//Nút chọn đồng ý
		this.NoElement =  new createjs.DOMElement(NoElement); this.NoElement.visible = false; //Nút bỏ qua
		this.formInputElement =  new createjs.DOMElement(htmlElement);this.formInputElement.visible = false;
		this.OKformInputElement =  new createjs.DOMElement(OKhtmlElement);this.OKformInputElement.visible = false;
		
		this.addChild(this.YesElement);
		this.addChild(this.NoElement);
		this.addChild(this.formInputElement);
		this.addChild(this.OKformInputElement);

		this.configure();
	}	


	/*
	Khởi tạo background mờ để hiện ảnh share
	*/
	inGame.prototype.createBlurBackground = function() {

		//Khởi tạo box để trả lời từ khóa
		this.shapeBg = new createjs.Shape();
		this.shapeBg.graphics.beginFill("#000");
		this.shapeBg.alpha = 0.7;
		this.shapeBg.graphics.drawRect(0, 0, 740, 536);

		this.blurBg = new createjs.Shape();
		this.blurBg.graphics.beginStroke("#fff");
		this.blurBg.graphics.setStrokeStyle(1); this.blurBg.alpha = 0.7;
		this.blurBg.graphics.beginFill("#fff");
		this.blurBg.graphics.drawRect(0, 0, 800, 430);
		this.blurBg.snapToPixel = true;
		this.blurBg.regY = 100; this.blurBg.y = 190;
		this.blurBg.shadow = new createjs.Shadow("#ddd", 0, 0, 10);
		//shape.scaleY = 0;
		this.shapeBg.visible = this.blurBg.visible = false;
		this.addChild(this.shapeBg, this.blurBg);

	}


	inGame.prototype.addBlurBackground = function() {
		this.shapeBg.visible = this.blurBg.visible = true;
	}

	inGame.prototype.removeBlurBackground = function() {
		this.shapeBg.visible = this.blurBg.visible = false;
	}




	inGame.prototype.preload = function(){
		// hàm khởi tạo đầu game, sử dụng khi khởi tạo ban đầu và khi sang level mới
	}


	// đặt vị trí cho các hình ảnh trong game
	inGame.prototype.configure = function(){
		this.counter = 0;
		this.attensionChecker = false;
		this.attension.visible = true;

		this.level.textAlign = "center";
		this.level.x = 535;
		this.level.y = 16;

		this.ruby.textAlign = "center";
		this.ruby.x = 665;
		this.ruby.y = 16;

		this.answerText.alpha = 0;

		for(i = 0; i < this.keys.length; i++){
			this.keys[i][0].alpha = 1;
			this.keys[i][0].regX = this.keys[i][0].image.width/2;
			this.keys[i][0].regY = this.keys[i][0].image.height/2;
			this.keys[i][0].scaleX = 0.8;
			this.keys[i][0].scaleY = 0.8;
			this.keys[i][0].y = 500;
			this.keys[i][0].x = this.gameWidth/2 + this.keys[i][0].image.width*0.9*(i-6.5);
			this.keys[i][1].alpha = 1;
			this.keys[i][1].x = this.keys[i][0].x ;
			this.keys[i][1].y = 485;
			this.keys[i][1].textAlign = "center";
		}

		for(i = 0; i < this.answers.length; i++){
			this.answers[i][0].regX = this.answers[i][0].image.width/2;
			this.answers[i][0].regY = this.answers[i][0].image.height/2;
			this.answers[i][0].y = 425;
			this.answers[i][0].x = this.gameWidth/2 + this.answers[i][0].image.width*0.9*(0.5 + i-this.answers.length/2);
			this.answers[i][0].value = i;
			this.answers[i][0].val = 14;
			this.answers[i][0].scaleX = 0.8;
			this.answers[i][0].scaleY = 0.8;
			this.answers[i][1].x = this.answers[i][0].x;
			this.answers[i][1].y = 412;
			this.answers[i][1].alpha = 0;
			this.answers[i][0].canChanged = true;
			this.stackAnswers.push(i);
		}
		
		this.attensionBox.regX = this.attensionBox.image.width/2;
		this.attensionBox.scaleX = 1.5;
		this.attensionBox.x = this.gameWidth/2;
		this.attensionBox.y = 100;

		this.attensionText.y = 120;
		this.attensionText.x = this.gameWidth/2;
		this.attensionText.textAlign = "center";
		this.attensionSubText.x = this.gameWidth/2;
		this.attensionSubText.y = 155;
		this.attensionSubText.textAlign = "center";

		this.stackAnswers.reverse();
		this.addEL(3);
	}

	// hàm tạo ô hiển thị đáp án
	inGame.prototype.generateAnswer = function(){
		tempStr = this.answerText.text;
		tempStr = tempStr.split(" ").join("");
		this.answers = new Array(tempStr.length);
		this.user_answers = new Array(tempStr.length);
		for(i = 0; i < tempStr.length; i++){
			this.answers[i] = new Object(2);
 			this.answers[i][0] = new createjs.Bitmap(contentmanager.item_answer);
			this.answers[i][1] = new createjs.Text(tempStr[i],"24px Arial","#FFF");
			this.answers[i][1].textAlign = "center";
		}
	}

	// hàm tạo bộ gõ từ đáp án được cho
	inGame.prototype.generateKeyboard = function(){
		string = "ABCDEGHIKLMNOPQRSTUVXY";

		var randomKeys = new Array(14 - this.answers.length);
		for( i = 0; i < randomKeys.length; i++){
			var temp = Math.floor(Math.random()*string.length);
			randomKeys[i] = string[temp];
		}
		
		for(i = 0; i < this.answers.length ; i++){
			randomKeys[i + 14 - this.answers.length] = this.answers[i][1].text;
		}

		for( i = 0; i < 14; i++){
			var rand = Math.floor(Math.random()*14);
			if(rand != i){
				var temp = randomKeys[rand];
				randomKeys[rand] = randomKeys[i];
				randomKeys[i] = temp;
			}
		}

		for( i = 0; i < 14; i++){
			this.keys[i] = new Object();
			this.keys[i][0] = new createjs.Bitmap(contentmanager.item_offer);
			this.keys[i][0].value = i;
			this.keys[i][1] = new createjs.Text(randomKeys[i],"30px Arial","#777");
		}
	}

	// addEventListener cho các phần tử con và chính nó
	inGame.prototype.addEL = function(type){
		if(!type || type < 1 || type > 3) return;
		if(type == 1 || type == 3)
		for( i = 0; i < 14; i++){
			this.keys[i][0].addEventListener("mousedown", function(e){
				soundClick();
				e.target.scaleX = 0.8;
				e.target.scaleY = 0.8;
				in_game.chooseLetter(e.target.value);
			});

			this.keys[i][0].addEventListener("mouseout", function(e){
				e.target.scaleX = 0.8;
				e.target.scaleY = 0.8;
			});

			this.keys[i][0].addEventListener("mouseover", function(e){
				e.target.scaleX = 0.9;
				e.target.scaleY = 0.9;
			});
		}
		if(type == 2 || type == 3)
		for(i = 0; i < this.answers.length; i++){
			this.answers[i][0].addEventListener("mousedown", function(e){
				if(e.target.val!= 14){
					soundClick();
					in_game.answers[e.target.value][1].text = "";
					in_game.answers[e.target.value][1].alpha = 0;
					in_game.discardLetter(e.target.value, e.target.val);
					e.target.val = 14;
				}
			});
		}
	}

	// removeEventListener cho các phẩn tử con và chính nó
	inGame.prototype.removeEL = function(type){
		if(!type || type > 3 || type < 1)	return;
		if(type ==1 || type == 3)
		for( i = 0; i < 14; i++)
			this.keys[i][0].removeAllEventListeners();
		if(type == 2 || type == 3)
		for( i = 0; i < this.answers.length; i++ )
			this.answers[i][0].removeAllEventListeners();
	}

	// xử lý khi người chơi chọn chữ cái để trả lời câu hỏi
	inGame.prototype.chooseLetter = function(position){
		// position: vị trí của chữ cái trong bảng phím chữ có sẵn
		this.keys[position][0].alpha = 0;
		this.keys[position][1].alpha = 0;
		var temp = this.stackAnswers.pop();
		this.answers[temp][1].text = this.keys[position][1].text;
		this.answers[temp][1].alpha = 1;
		this.answers[temp][0].val = position;

		this.counter++;
		if(this.counter == this.answers.length){
			this.removeEL(1);
			this.isItTrue();
		}
	}

	// xử lý khi người chơi hủy chọn một chữ cái trong câu trả lời
	inGame.prototype.discardLetter = function(position, val){
		// position: vị trí của chữ cái trong bảng câu trả lời
		this.stackAnswers.push(position);
		this.stackAnswers = this.stackAnswers.sort(function(a, b){return a-b});
		this.stackAnswers = this.stackAnswers.reverse();

		this.keys[val][1].alpha = 1;
		this.keys[val][0].alpha = 1;

		this.counter--;
		if(this.counter == this.answers.length - 1){
			//console.log("recovery catching event");
			this.addEL(1);
		}
	}

	// xử lý khi số chữ cái đã chọn bằng với độ dài của đáp án
	inGame.prototype.isItTrue = function(){
		//console.log('checking answers');
		var tempStr1 = "";
		for(i = 0; i < this.answers.length; i++)
			tempStr1 += this.answers[i][1].text;
		var tempStr2 = this.answerText.text.split(" ").join("");
		if(tempStr1 == tempStr2){
			this.nextQuestion();
			soundPass();
		}else
			soundOver();
	}

	inGame.prototype.nextQuestion = function(){
		savescore.upLevel();
		this.ruby.text = this.ruby.text + 3;
		savescore.setRuby(this.ruby.text);
		resultscene.generateAnswer();
		resultscene.configure();
		stage.addChild(resultscene);
		qanda.nextToCurrent();				// câu hỏi tiếp theo thành câu hỏi hiện tại
		this.removeEL(3);					// bỏ hết thuộc tính bắt sự kiện
		this.removeAllChildren();
		in_game.visible = false;
		in_game.initialize();
		resultscene.alpha = 1;	
	}

	// chuẩn hóa chữ có dấu thành không dấu
	inGame.prototype.normalizeText = function(){
		var str = this.answerText.text;
		str = str.toLowerCase(); 
	    str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g,"a"); 
	    str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g,"e"); 
	    str = str.replace(/ì|í|ị|ỉ|ĩ/g,"i"); 
	    str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g,"o"); 
	    str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g,"u"); 
	    str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g,"y"); 
	    str = str.replace(/đ/g,"d");
	    str = str.toUpperCase();
	    this.answerText.text = str;
	}


	inGame.prototype.completePost = function() {
		var self = in_game;
		self.pressButtonPost = false;
		$("#ok").html('Thành công :D!');

		window.setTimeout(function() {
			self.removeBlurBackground();
			self.tempImg.visible = false;
			self.formInputElement.visible = false;
			self.OKformInputElement.visible = false;

		}, 1000);
	}

	inGame.prototype.errorPost	= function() {
		self.pressButtonPost = false;
		console.log("Lỗi rồi");
	}

	//Thực hiện post ảnh khi người dùng ấn nút chia sẻ
	inGame.prototype.performPost = function(message) {
		var self = in_game;

		if (!self.pressButtonPost) {
			self.pressButtonPost = true;

			//Đổi chữ
			$("#ok").html('Chờ chút nhé..'); 
			//Disable textarre
			$('input[type="text"], textarea').attr('readonly','readonly');

			PostImageToFacebook(message, self.imageData);
		}
	}


	//Hàm chụp lại ảnh canvas
	inGame.prototype.takePhoto = function() {
		var self = in_game;
		self.imageData = window.canvas.toDataURL("image/png");

		//ẩn ảnh share_Face
		self.btnShareFace.visible=true;

		self.tempImg = new createjs.Bitmap(self.imageData); self.tempImg.visible = true;
		self.tempImg.x = self.gameWidth/2; self.tempImg.regX = self.tempImg.image.width/2;
		self.tempImg.y = self.gameHeight/2; self.tempImg.regY = self.tempImg.image.height/2;

		//thêm backgroud - hiển thị cho đẹp
		self.addBlurBackground();
		self.addChild(self.tempImg);


		//Đổi chữ
		$("#ok").html('Chia sẻ!'); 
		//Disable textarre
		$('input[type="text"], textarea').val('');
		$('input[type="text"], textarea').removeAttr('readonly');


		createjs.Tween.get(self.tempImg).to({scaleX: 0.5, scaleY: 0.5},300).to({ y: (self.gameHeight/2 - 30) }, 300);
		createjs.Tween.get(self.formInputElement).to({x: -200, y: 400, visible:true}).to({x: 170 }, 500);
		createjs.Tween.get(self.OKformInputElement).to({x: 800, y: 430, visible:true}).to({x: 580 }, 500);
	}


	//thực hiện khi click share facebook button
	inGame.prototype.mouseDownButtonShare = function() {
		var self = in_game;
		self.btnShareFace.visible = false;
		createjs.Tween.get(self.effectTakePhoto).to({visible: true, alpha: 1}).to({alpha:0, visible: false},500).call(function() {self.takePhoto();});
	}
	
	inGame.prototype.mouseOverButtonShare = function() {
		var self = in_game;
		createjs.Tween.get(self.btnShareFace).to({scaleX: self.btnShareFace.scaleX + 0.1,scaleY:self.btnShareFace.scaleY + 0.1},200);
	}
	
	inGame.prototype.mouseOutButtonShare = function() {
		var self = in_game;
		createjs.Tween.get(self.btnShareFace).to({scaleX: self.btnShareFace.scaleX - 0.1,scaleY:self.btnShareFace.scaleY - 0.1},200);
	}
	
	inGame.prototype.getHelp = function(e){
		if(!in_game.attensionChecker){
			in_game.createAttention(1);
			return;
		}

		e.target.scaleY = 1;
		e.target.scaleX = 1;

		if(parseInt(in_game.ruby.text) < 5){
			in_game.createAttention(2);
			return;
		}
		if(in_game.timesOfHelp >= in_game.answers.length)
			return;

		in_game.ruby.text -= 5;
		savescore.setRuby(in_game.ruby.text);
		savescore.updateRuby();
		in_game.answers[in_game.timesOfHelp][0].removeAllEventListeners();
		in_game.answers[in_game.timesOfHelp][0].canChanged = false;
		var temp = in_game.answerText.text.split(" ").join("")[in_game.timesOfHelp];
		in_game.answers[in_game.timesOfHelp][1].text = temp;
		in_game.answers[in_game.timesOfHelp][1].alpha = 1;
		in_game.answers[in_game.timesOfHelp][1].color = "#66FF66";
		if(in_game.stackAnswers.indexOf(in_game.timesOfHelp) != -1){
			in_game.stackAnswers.pop();
			in_game.counter++;
		}
		for( i = 0; i < 14; i++){
			if(in_game.keys[i][1].text == temp && in_game.keys[i][0].alpha != 0){
				in_game.keys[i][1].alpha = 0;
				in_game.keys[i][0].alpha = 0;
				temp = 'Z';
			}
		}
		in_game.timesOfHelp++;
		if(in_game.counter == in_game.answers.length)
			in_game.isItTrue();
	}

	inGame.prototype.createAttention = function(type){
		if(type == 1)
			in_game.attensionText.text = "Để mở ô chữ bạn cần sử dụng 5 ruby.";
		if(type == 2)
			in_game.attensionText.text = "Bạn không có đủ ruby, cố lên nào!!!";
		in_game.attensionSubText.text = "Click ô hội thoại để đóng.";
		in_game.attension.alpha = 1;
		in_game.attension.visible = true;
		in_game.attensionChecker = true;
		in_game.attension.addEventListener("mousedown", function(e){
			in_game.attension.visible = false;
			in_game.attension.alpha = 0;
		});
	}

	window.inGame = inGame;
}(window));